<!--
    获取键值对
    对象名.键名  
    或者   
    对象名["键名"] 

    设置键值对
    对象名.键名=值
    或者
    对象名["键名"]=值
 -->





<!-- 
    for (i in 对象) {        循环遍历取键，值，键值对（i是键名）
    console.log(obj);       // 所有键值对
    console.log(k);         //  所有键
    console.log(对象名[k]);     //  所有值
    }


    直接取键，值，键值对                   
    Object.keys(obj)        //  所有键
    Object.values(obj)      //  所有值
    Object.entries(obj)     //  所有键值对
  -->




<!-- 
    this        当前对象    （没有作用域，则指向Windows）
-->





<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>对象</title>
</head>

<body>
    <script>





        // // --------------------------------------对象--------------------------------------
        // let obj = {
        //     "k1": 123,
        //     "k2": "hi",
        //     "k3": false,
        //     "k4": null,
        //     "k5": undefined,
        //     "k6": [],
        //     "k7": {},
        //     "k8": {
        //         "k11": 1,
        //         "k22": {
        //             "k111": 2
        //         }
        //     }
        // }

        // console.log(typeof (obj));       //  object
        // console.log(obj);       // 所有键值对
        // console.log(Object.keys(obj));      //  所有键
        // console.log(Object.values(obj));        //  所有值
        // console.log(Object.entries(obj));       //  所有键值对


        // for (k in obj) {
        // console.log(k);      //  所有键
        // console.log(obj[k]);        //  所有值
        // }







        // // --------------------------------------写法简化省略----------------------------------
        // // 简写写法
        // // 原
        // let obj = {
        //     "name": "小黑子",
        //     "age": 25,
        //     "fun1": function () {
        //         console.log("妈妈生的");
        //     },
        //     "fun2": () => { console.log("理塘丁真"); },
        // }


        // // 键名不带引号
        // let obj = {
        //     name: "小黑子",
        //     age: 25,
        //     fun1: function () {
        //         console.log("妈妈生的");
        //     },
        //     fun2: () => { console.log("理塘丁真"); },
        // }


        // // 值可以调用已定义的变量
        // let name = "小黑子", age = 25
        // let obj = {
        //     name: name,
        //     age: age,
        //     fun1: function () {
        //         console.log("妈妈生的");
        //     },
        // }


        // 键与值同名  可以省略
        // 函数可以省略:function
        // let name = "小黑子", age = 25
        // let obj = {
        //     name,
        //     age,
        //     fun1() {
        //         console.log("妈妈生的");
        //     },
        // }







        // // --------------------------------------对象解构----------------------------------
        // // 写法1     直接解构赋值
        // let { fun, name, age } = {
        //     fun: function () { console.log("匿名函数"); },
        //     name: "小黑子",
        //     age: 25
        // }
        // fun()
        // console.log(name, age);


        // // 写法2     参数中解构
        // function fun({name, age}){
        //     console.log(name, age);
        // }

        // fun({
        //     name:"小黑子",
        //     age:25
        // })









        // // --------------------------------------this----------------------------------
        // // 匿名函数有作用域
        // // 箭头函数没有作用域
        // let obj = {
        //     name: "小黑子",
        //     age: 25,
        //     fun1() {
        //         console.log(this);      //  this指向当前对象
        //     },
        //     fun2: () => {
        //         console.log(this);      // Windows
        //     }
        // }
        // obj.fun1()
        // obj.fun2()





        // // 匿名函数中    代表当前对象
        // document.onclick = function () {
        //     console.log(this);
        // }


        // // 箭头函数没有作用域    代表Windows
        // document.onclick = () => {
        //     console.log(this);
        // }






    </script>

</body>

</html>